"""
https://leetcode.cn/problems/longest-palindromic-substring/description/

5. 最长回文子串
已解答
中等
相关标签
premium lock icon
相关企业
提示
给你一个字符串 s，找到 s 中最长的 回文 子串。

 

示例 1：

输入：s = "babad"
输出："bab"
解释："aba" 同样是符合题意的答案。
示例 2：

输入：s = "cbbd"
输出："bb"
 

提示：

1 <= s.length <= 1000
s 仅由数字和英文字母组成

"""

class Solution:
    """
    如果要判定一个字符串，是回文字符串，较简单的方式是左右指针法。
    即分别从字符串的最左端和最右端开始向中间遍历，如果直到left>right之前的字符一直相同，则说明该字符串是回文字符串。

    如果要找到一个字符串中的最长回文字符串，最暴力的方式是：
    从每个字符，或者长度为2的字符串开始，逐渐向两端伸展，直到字符不一致为止，如此就可以拿到以此为中心的最长字符串。


    """
    def longestPalindrome(self, s: str) -> str:
        def calc_single_max(s:str,idx:int)->str:
            left=idx-1
            right=idx+1
            while left>=0 and right<len(s):
                if s[left]!=s[right]:
                    break
                left-=1
                right+=1
            return s[left+1:right]
        
        def calc_double_max(s:str,idx:int)->str:
            left=idx
            right=idx+1
            while left>=0 and right<len(s):
                if s[left]!=s[right]:
                    break
                left-=1
                right+=1
            return s[left+1:right]
        
        max_str=s[0]
        for i in range(len(s)):
            single_str=calc_single_max(s,i)
            # print(single_str)
            double_str=calc_double_max(s,i)
            # print(double_str)
            if len(single_str)>len(max_str):
                max_str=single_str
            if len(double_str)>len(max_str):
                max_str=double_str 

        return max_str
    
if __name__=='__main__':
    s='bb'

    sol=Solution()
    res=sol.longestPalindrome(s)
    print(res)